/*
 * Copyright (C), 2005-2018, 上海瑛麒动漫科技有限公司
 * FileName: RedisClient.java
 * Author:   tianmu
 * Date:     2018年2月22日 下午1:52:31
 * Description: //模块目的、功能描述
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.sfang.common.redis.sdk;

import com.sfang.common.redis.redisson.RedissonAtomicLong;
import org.redisson.api.RBatch;
import org.redisson.api.RBlockingDeque;
import org.redisson.api.RDelayedQueue;
import org.redisson.api.RQueue;

import java.util.List;

/**
 * 〈一句话功能简述〉<br>
 * 〈功能详细描述〉
 *
 * @author tianmu
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface RedisClient {

    /**
     * 功能描述: <br>
     * 创建批量处理操作类（没有封装）
     *
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    RBatch createBatch();

    <T> void addDelayQueue(T value, long delay, String queueCode);
    <V> RBlockingDeque<V> getBlockingDeque(String name);
    <V> RDelayedQueue<V> getDelayedQueue(RQueue<V> destinationQueue);

    /**
     * 功能描述: <br>
     * 获取单一对象的操作类
     *
     * @param name
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    <V> RedisBucket<V> getBucket(String name);

    /**
     * 功能描述: <br>
     * 获取List类型的操作类
     *
     * @param name
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    <V> RedisList<V> getList(String name);

    /**
     * 功能描述: <br>
     * 获取分布式锁的操作类
     *
     * @param name
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    RedisLock getLock(String name);

    /**
     * 功能描述: <br>
     * 获取Map类型的操作类
     *
     * @param name
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    <K, V> RedisMap<K, V> getMap(String name);

    RedissonAtomicLong getAtomicLong(String name);

    /**
     * 功能描述: <br>
     * 获取Set类型的操作类
     *
     * @param name
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    <V> RedisSet<V> getSet(String name);

    /**
     * 功能描述: <br>
     * 关闭连接
     *
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void shutdown();

    Iterable<String> keys();

    List<String> keys(String pattern);

    void deleteByPattern(String pattern);

    RedisScript getScript();
}
